package com.erp.erp_servers.Customer;

import com.alibaba.fastjson.JSONObject;
import com.erp.erp_entitys.Customer.*;
import com.erp.erp_entitys.User.UserEntity;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @ClassName ICustomerService
 * @Description TODO
 * @Author songjizhen
 * @Date 2020-06-29 20:04
 * @Version 1.0
 */
public interface ICustomerService {
    long countByExample(CustomerExample example);

    int deleteByExample(CustomerExample example);

    int deleteByExample(CustomerExample example,List<Integer> ids) throws Exception;

    int deleteByPrimaryKey(Integer id);

    int insert(CustomerEntity record);

    int insertSelective(CustomerEntity record);

    List<CustomerEntity> selectByExample(CustomerExample example);
    List<CustomerEntity> select (CustomerEntity record);
    /**
     * 分层获取客户
     * @return
     */
    Map<String,Object> getAllCustomer(Integer type, Integer lx );

    CustomerEntity selectByPrimaryKey(Integer id);

    int updateByExampleSelective(@Param("record") CustomerEntity record, @Param("example") CustomerExample example);

    int updateByExample(@Param("record") CustomerEntity record, @Param("example") CustomerExample example);

    int updateByPrimaryKeySelective(CustomerEntity record);

    int updateByPrimaryKey(CustomerEntity record);

    List<CustomerEntity>  selectByMap(@Param("record") CustomerEntity record);//根据分类、业务员、名称查询
    List<CustomerEntity>  selectByMap2(@Param("record") CustomerEntity record);//根据分类、业务员、名称查询

    List<CustomerEntity>  selectByKzt(String days,String saleman,String name,String type);//查询当月新增、30天未联系、60天未butx、85天未联系

    /**
     * 根据Id更新流程状态
     * @param id
     * @return
     */
    boolean updateStatus(String id,String spstatus);

    /**
     * 客户汇总、供应商汇总
     * @return
     */
    Map<String,Object> getHZ(UserEntity user);
    Map<String,Object> getHZ2(UserEntity user);

    /**
     * 30天、60天内未联系的客户
     * @param user
     * @return
     */
    Map<String,Object> getHZ30And60Days(UserEntity user);

    /**
     * 获取客户、用户、供应商信息
     * @return
     */
    Map<String,Object> getCustomerAndUserAndSupplier();

    int contactCountByDays(String days);

    /**
     * 根据邮箱获取用户、客户、供应商信息
     * @param emailList
     * @return
     */
    List<Map<String,Object>> getMapByEmail(List<String> emailList);
    /**
     * 根据客户流程表更新供应商表审批状态
     */
    int updateStatusByProcessAndCustomer();

    /**
     * 根据客户编码获取客户信息
     * @param customerCode
     * @return
     */
    CustomerEntity findCustomerByCode(String customerCode);
    /**
     * 获取当前用户所管理 （及其所管理员工）的客户联系人信息
     * @return
     */
    Map<String,Object> queryConTactByUserCode(UserEntity user);

    /**
     * 获取用户名称+编码
     * @param customerAndEmail
     * @return
     */
    List<String> selectEmailCustomByDim(CustomerAndEmail customerAndEmail);

    /**
     * 获取客户、联系人两级树
     * @param code
     * @return
     */
    List<Map<String,Object>> selectEmailCustomConCateByCode(String code);

    /**
     * 客户信息记录 统计
     * @param req
     * @return
     */
    PageInfo<CustomerInformationRecordRes> getCustomerInfoList(CustomerInformationRecordReq req);
    /**
     * 客户信息记录-导出
     * @param req
     * @return
     */
    JSONObject customerInfoListExport(CustomerInformationRecordReq req);
    /**
     * 转移 多个客户编号转移到同一个业务员
     * @param salesmanCode 业务原编码
     * @param  code 客户编码
     * @return
     */
    int updateCustomerSal(String salesmanCode,String code);

    /**
     * 判断text是否已存在
     * @param text
     * @param zd
     * @return
     */
    String isExist(String text,String zd,String id);


    /**
     * 新客户账期详情统计-分页
     * @param req
     * @return
     */
    PageInfo<CustomerBillingPeriodRes> customerBillingPeriod(CustomerBillingPeriodReq req);
    /**
     * 新客户账期详情统计-导出
     * @param req
     * @return
     */
    JSONObject customerBillingPeriodExport(CustomerBillingPeriodReq req);

    /**
     * 客户下单出货记录统计-分页
     * @param req
     * @return
     */
    PageInfo<CustomerOrderAndShipInfoRes> customerOrderAndShipInfo(CustomerOrderAndShipInfoReq req);
    /**
     * 客户下单出货记录统计-导出
     * @param req
     * @return
     */
    JSONObject customerOrderAndShipInfoExport(CustomerOrderAndShipInfoReq req);
    /**
     * 从初次联系以及 360天未做外销合同的潜在客户,加入公共池
     * @return
     */
    int potentialCustomerNotExport(String type,Integer day);
    /**
     * 合作客户距上次成单360天未成单加入公共池
     * @return
     */
    int potentialCustomerLastExport(String type,Integer day);

    /**
     * 将原来的业务员赋值给创建人，并置空原来的业务员
     * @param record
     */
    void updateCustomerByParam(CustomerEntity record);

}
